package jwr.ex;

import java.util.Scanner;


public class Ch04_Ex6 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		String name,rating;
		int seatNum;
		int cnt = 5;
		boolean isResult = true;
		
		
		Reserve re = new Reserve();
		
		do{
			System.out.print("예약(1), 조회(2), 취소(3), 끝내기(4)>>");
			cnt = sc.nextInt();
			if(cnt<1 || cnt>4){ // 예약(1), 조회(2), 취소(3), 끝내기(4) 중 선택 안했을 경우 
				System.out.println("1~4중 선택해 주세요");// 밑에 글을 출력 후 재선택 하게 돌림
			}else{
				if(cnt == 1){
					System.out.print("이름>>");
					name = sc.next();
					System.out.print("좌석 등급>>");
					rating = sc.next();
					System.out.print("좌석 번호>>");
					seatNum = sc.nextInt();
					/*if(rating.equals("S")||rating.equals("s"))
						result=re.compareS(seatNum);
					else if(rating.equals("A")||rating.equals("a"))
						result=re.compareA(seatNum);
					else if(rating.equals("B")||rating.equals("b"))
						result=re.compareB(seatNum);
					else{
						System.out.println("좌석등급은 S,A,B등급만 있습니다.");
					}*/
					try{ // 좌석은 1~10자린데 그 범위 넘을 경우 예외처리 39 ~ 63 line
						switch(rating){ // 예약하려는 좌석이 빈자리인지 비교 40~ 59 line
							case "S":
							case "s":
								isResult=re.compareS(seatNum);
								break;
							case "A":
							case "a":
								isResult=re.compareA(seatNum);
								break;
							case "B":
							case "b":
								isResult=re.compareB(seatNum);
								break;
							default :
								System.out.println("좌석등급은 S,A,B등급만 있습니다.");
						}
						if(isResult){
							re.setReserve(name, rating, seatNum);
						}else{
							System.out.println("이미 예약이 되어있습니다.");
						}
					}catch (ArrayIndexOutOfBoundsException e) {
						System.out.println("좌석은 1~10까지입니다.");
					}
				}else if(cnt == 2){ // 현재 좌석 현황 출력
					System.out.println(re.toString());
				}else if(cnt == 3){ // 예약 취소
					System.out.print("이름>>");
					name = sc.next();
					System.out.print("좌석 등급>>");
					rating = sc.next();
					System.out.print("좌석 번호>>");
					seatNum = sc.nextInt();
					re.cancelReserve(name, rating, seatNum);
				}
			}
		}while(cnt !=4); // 끝내기(4)가 아닌경우 계속 실행
	}

}

class Reserve{
	private String name,rating;
	private int seatNum;
//	Scanner sc = new Scanner(System.in);
	String aSeats[] = new String[10];
	String sSeats[] = new String[10];
	String bSeats[] = new String[10];
	public Reserve() {		
		for(int i = 0; i<10;i++){
			aSeats[i] ="-"+(i+1)+"-"; 
			bSeats[i] ="-"+(i+1)+"-"; 
			sSeats[i] ="-"+(i+1)+"-"; 
		}
	} // 생성자 모든 좌석을 빈좌석으로 초기화 한다.
	public void setReserve(String name, String rating, int seatNum){
		this.name = name;
		this.rating = rating;
		this.seatNum = seatNum;
		/*if(rating.equals("S")||rating.equals("s")){
			sSeat[seatNum-1] = name;
		}else if(rating.equals("A")||rating.equals("a")){
			aSeat[seatNum-1] = name;
		}else if(rating.equals("B")||rating.equals("b")){
			bSeat[seatNum-1] = name;
		}*/
		switch(rating){
		case "S":
		case "s":
			sSeats[seatNum-1] = name;
			break;
		case "A":
		case "a":
			aSeats[seatNum-1] = name;
			break;
		case "B":
		case "b":
			bSeats[seatNum-1] = name;
			break;
		}
	} // 예약 메서드 정보를 받아 예약한다.
		
	public void cancelReserve(String name, String rating, int seatNum){
		if(rating.equals("S")||rating.equals("s")){
			if(sSeats[seatNum-1].equals(name))
				sSeats[seatNum-1] ="-"+seatNum+"-";
			else
				System.out.println("정보가 잘못 되었습니다.");
		}else if(rating.equals("A") || rating.equals("a")){
			if(aSeats[seatNum-1].equals(name))
				aSeats[seatNum-1] ="-"+seatNum+"-";
			else
				System.out.println("정보가 잘못 되었습니다.");
		}else if(rating.equals("B") || rating.equals("b")){
			if(bSeats[seatNum-1].equals(name))
				bSeats[seatNum-1] ="-"+seatNum+"-";
			else
				System.out.println("정보가 잘못 되었습니다.");
		}
	} // 예약 취소 메서드 예약 취소할 때 사용
	public boolean compareS(int seatNum){
		boolean isResult;
		if(sSeats[seatNum-1].equals("-"+seatNum+"-")){
			isResult = true;
		}else{
			isResult = false;
		}
		return isResult;
	} // S등급 좌석 비교 할때 사용 하는 메서드
	public boolean compareA(int seatNum){
		boolean isResult;
		if(aSeats[seatNum-1].equals("-"+seatNum+"-")){
			isResult = true;
		}else{
			isResult = false;
		}
		return isResult;
	}// A등급 좌석 비교 할때 사용 하는 메서드
	public boolean compareB(int seatNum){
		boolean isResult;
		if(bSeats[seatNum-1].equals("-"+seatNum+"-")){
			isResult = true;
		}else{
			isResult = false;
		}
		return isResult;
	}// B등급 좌석 비교 할때 사용 하는 메서드
	
	/*public void setInfo(){
		System.out.print("이름>>");
		name = sc.next();
		System.out.print("좌석 등급>>");
		rating = sc.next();
		System.out.print("좌석 번호>>");
		seatNum = sc.nextInt();
	}*/
	@Override
	public String toString() {
		String result ="S석 : ";
			for(int i = 0; i<10 ;i++){
				result += sSeats[i]+" ";
			}
			result+="\nA석 : ";
			for(int i = 0; i<10 ;i++){
				result += aSeats[i]+" ";
			}
			result+="\nB석 : ";
			for(int i = 0; i<10 ;i++){
				result += bSeats[i]+" ";
			}
		return result;
	}// 현재 좌석 현황을 보여줌
	
}